/**
 * 
 */
package ao.com.bna.dao;

import java.util.List;

import org.hibernate.Transaction;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import ao.com.bna.beans.ItemRequisicao;
import ao.com.bna.beans.Pedido;
import ao.com.bna.beans.Requisicao;


public class RequisicaoDao extends HibernateDaoSupport {
	/**
	 * @see Metodo que lista.
	 */
	public List<Requisicao> listar() {
		return getHibernateTemplate().loadAll(Requisicao.class);
	}

	/**
	 * @see Metodo para obtencao de um registo passando como parametro o id.
	 */
	public Requisicao obterPorID(Long id) {
		return (Requisicao) getHibernateTemplate().get(Requisicao.class, id);
	}

	/**
	 * @see Metodo que actualiza o registo na tabela 
	 */
	public void gravar(Requisicao info) {
		getHibernateTemplate().saveOrUpdate(info);
	}

	/**
	 * @see Metodo que remove o registo na tabela
	 */
	public void remover(Requisicao info) {
		getHibernateTemplate().delete(info);
	}

	// ------------------------------------------------------------
	
	/**
	 * @see Metodo que actualiza o registo na tabela
	 */
	public void gravar(Requisicao info, List<Pedido> pedidos) {
		Transaction tx = this.getSessionFactory().openSession()
				.getTransaction();
		try {
			tx.begin();
			getHibernateTemplate().saveOrUpdate(info);
			if (pedidos.size() < 1) {
				tx.rollback();
				System.out.println("TRANSACAO CANCELADA...");
				return;
			}
			
			for (Pedido pedido : pedidos) {
				ItemRequisicao itemRequisicao = new ItemRequisicao();
				itemRequisicao.setRequisicao(info);
				itemRequisicao.setPedido(pedido);
				getHibernateTemplate().saveOrUpdate(itemRequisicao);
				System.out.println("TRANSACAO BEM SUCEDIDA...");
			}
			tx.commit();
		} catch (Exception ex) {
			tx.rollback();
			ex.printStackTrace();
		}
	}
	
	/**
	 * @see Metodo que lista.
	 */
	public List<ItemRequisicao> listarItems() {
		return getHibernateTemplate().loadAll(ItemRequisicao.class);
	}

	/**
	 * @see Metodo para obtencao de um registo passando como parametro o id.
	 */
	public ItemRequisicao obterItemPorID(Long id) {
		return (ItemRequisicao) getHibernateTemplate().get(ItemRequisicao.class, id);
	}

	/**
	 * @see Metodo que actualiza o registo na tabela 
	 */
	public void gravarItem(ItemRequisicao info) {
		getHibernateTemplate().saveOrUpdate(info);
	}

	/**
	 * @see Metodo que remove o registo na tabela
	 */
	public void removerItem(ItemRequisicao info) {
		getHibernateTemplate().delete(info);
	}

}
